package com.zrrd.learn.chapter09.collectlianxi;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * 练习
 *
 * @author wrn
 * @version 1.0
 * @date 2023/8/16 14:02
 */

public class Practice {

    /**
     * 问题1：将列表中的偶数翻倍
     * 编写一个函数，接受一个整数列表，并将列表中的所有偶数翻倍。
     */
    public static void question01(){

        System.out.println("请输入list列表长度");
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        List<Integer> list = new ArrayList<>();

        System.out.println("请输入"+count+"个元素");
        for (int i = 0; i < count; i++) {
            System.out.println("请输入第"+(i+1)+"个元素");
            Scanner scanner1 = new Scanner(System.in);
            int a = scanner1.nextInt();
            list.add(a);
        }

        System.out.println("您输入的整数列表为"+list);

        for (int i = 0; i < list.size(); i++) {
            if (list.get(i)%2==0){
                list.set(i, list.get(i)*2);
            }
        }

        System.out.println("您输入的整数列表偶数翻倍后为"+list);


    }

    /**
     *找出列表中的最大值和最小值
     * 编写一个函数，接受一个整数列表，并返回列表中的最大值和最小值。
     */
    public static void question02(){

        System.out.println("请输入list列表长度");
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        List<Integer> list = new ArrayList<>();

        System.out.println("请输入"+count+"个元素");
        for (int i = 0; i < count; i++) {
            System.out.println("请输入第"+(i+1)+"个元素");
            Scanner scanner1 = new Scanner(System.in);
            int a = scanner1.nextInt();
            list.add(a);
        }

        System.out.println("您输入的整数列表为"+list);
        Collections.sort(list);
        System.out.println("最小值"+list.get(0)+"最大值"+list.get(list.size()-1));

    }

    /**
     *列表元素交替合并
     * 编写一个函数，接受两个整数列表，并将它们的元素交替合并到一个新的列表中。
     */
    public static void question03(){

        System.out.println("请输入list列表长度");
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        System.out.println("列表1请输入"+count+"个元素");
        for (int i = 0; i < count; i++) {
            System.out.println("请输入第"+(i+1)+"个元素");
            Scanner scanner1 = new Scanner(System.in);
            int a = scanner1.nextInt();
            list1.add(a);
        }

        System.out.println("列表2请输入"+count+"个元素");
        for (int i = 0; i < count; i++) {
            System.out.println("请输入第"+(i+1)+"个元素");
            Scanner scanner1 = new Scanner(System.in);
            int a = scanner1.nextInt();
            list2.add(a);
        }
        System.out.println("您输入的整数列表1为"+list1);
        System.out.println("您输入的整数列表2为"+list2);

        List<Integer> list3 = new ArrayList<>();

        list3.addAll(list1);
        list3.addAll(list2);
        System.out.println("列表1和列表2合并后为"+list3);

    }

    /**
     *问题6：子列表查找
     * 编写一个函数，接受一个整数列表和一个目标整数S，找出列表中连续元素之和等于S的子列表。
     */
    public static void question04(){

        System.out.println("请输入list列表长度");
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        List<Integer> list = new ArrayList<>();

        System.out.println("请输入"+count+"个元素");
        for (int i = 0; i < count; i++) {
            System.out.println("请输入第"+(i+1)+"个元素");
            Scanner scanner1 = new Scanner(System.in);
            int a = scanner1.nextInt();
            list.add(a);
        }

        System.out.println("请输入目标整数S");
        Scanner scanner1 = new Scanner(System.in);
        int s = scanner.nextInt();

        System.out.println("您输入的整数列表为"+list);
        System.out.println("您输入的目标整数为"+s);

        List<Integer> list2 = new ArrayList<>();
        for (int i = 0; i < list.size()-1; i++) {
            if(list.get(i)+ list.get(i+1)==s){
                list2.add(list.get(i));
                list2.add(list.get(i+1));
            }
        }
        if (list2.size()!=0){
            System.out.println("连续元素之和等于S的子列表为"+list2);
        } else {
            System.out.println("无满足条件的子列表");
        }

    }

    /**
     *问题7：循环位移列表
     * 编写一个函数，接受一个整数列表和一个非负整数K，将列表中的元素循环右移K次。
     */
    public static void question05(){

        System.out.println("请输入list列表长度");
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        List<Integer> list = new ArrayList<>();

        System.out.println("请输入"+count+"个元素");
        for (int i = 0; i < count; i++) {
            System.out.println("请输入第"+(i+1)+"个元素");
            Scanner scanner1 = new Scanner(System.in);
            int a = scanner1.nextInt();
            list.add(a);
        }

        System.out.println("请输入循环右移次数K");
        Scanner scanner1 = new Scanner(System.in);
        int k = scanner.nextInt();

        System.out.println("您输入的整数列表为"+list);
        System.out.println("您输入的循环右移次数K为"+k);

        for (int i = 0; i < k; i++) {
            Collections.rotate(list,1);
        }
        System.out.println("您输入的整数列表循环右移"+k+"次为"+list);

    }

    /**
     * 问题8：列表中的连续递增序列
     * 编写一个函数，接受一个整数列表，返回其中所有连续递增序列的起始和结束索引。
     */
    public static void question06(){

        System.out.println("请输入list列表长度");
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        List<Integer> list = new ArrayList<>();

        System.out.println("请输入"+count+"个元素");
        for (int i = 0; i < count; i++) {
            System.out.println("请输入第"+(i+1)+"个元素");
            Scanner scanner1 = new Scanner(System.in);
            int a = scanner1.nextInt();
            list.add(a);
        }

        System.out.println("您输入的整数列表为"+list);

        for (int i = 0; i < list.size(); i++) {
            if (i==list.size()-1){
                System.out.printf("起始：%d,结束:%d\n",list.size()-1,list.size()-1);
                continue;
            }
            int end = i;
            do {
                System.out.printf("起始：%d,结束:%d\n",i,end);
                end++;
                if (end==list.size()){
                    break;
                }
            }while (list.get(end)- list.get(end-1)==1);
        }

    }

    /**
     * Set
     */

    /**
     *问题9：删除倒数第N个节点
     * 编写一个函数，接受一个链表（用ListNode表示）和一个整数N，删除链表倒数第N个节点。
     */
    public static void question07(){

    }

    /**
     *问题 1：
     * 创建一个程序，接受用户输入的一段文本，并找出文本中出现的所有不重复的单词。将这些单词存储在一个 Set 集合中，并打印出集合中的所有单词。、
     */
    public static void question08(){



    }

    /**
     *问题 2：
     * 编写一个程序，从两个整数数组中找出共同的元素，并将它们存储在一个 Set 集合中。然后，打印出这个集合中的所有元素。
     */
    public static void question09(){

    }

    /**
     *问题 3：
     * 实现一个简单的英汉词典程序。用户可以输入英文单词，程序会返回对应的中文释义。使用 Map 来存储单词和对应的释义。
     */
    public static void question10(){

    }

    /**
     *问题 4：
     * 创建一个程序，从一个字符串中找出出现次数最多的字符，并打印出该字符以及它在字符串中出现的次数。
     */
    public static void question11(){

    }

    /**
     *问题 5：
     * 实现一个简单的模拟购物车程序。用户可以不断地输入要购买的商品名称，这些商品名称将被存储在一个 Set 集合中。用户输入 "done" 表示购物完成，程序会打印出购物车中的所有商品。
     */
    public static void question12(){

    }

    /**
     *问题 6：
     * 编写一个程序，接受一段文本，并计算每个单词在文本中出现的频率。然后，按照频率由高到低的顺序，打印出单词和它的频率。
     */
    public static void question13(){

    }


    public static void main(String[] args) {

//        question01();
//        question02();
//        question03();
//        question04();
//        question05();

    }

}
